package com.czg.jsonschema2lombokpojo.rules;

import com.fasterxml.jackson.databind.JsonNode;
import com.sun.codemodel.JDocComment;
import com.sun.codemodel.JDocCommentable;
import org.apache.commons.lang3.StringUtils;
import com.czg.jsonschema2lombokpojo.Schema;

/**
 * 应用json-schema-07中的“$comment”schema属性。
 *
 * @see <a
 *      href="https://tools.ietf.org/html/draft-handrews-json-schema-01#section-9">https://tools.ietf.org/html/draft-handrews-json-schema-01#section-9</a>
 */
public class CommentRule implements Rule<JDocCommentable, JDocComment> {

    protected CommentRule() {
    }

    /**
     * 应用此schema规则执行所需的代码生成步骤。
     * <p>
     * 当发现$comment节点并应用此规则时，$comment的值将作为方法和字段级JavaDoc注解添加。
     *
     * @param nodeName
     *            此描述应用于的对象的名称
     * @param node
     *            “$comment”schema节点
     * @param parent
     *            父节点
     * @param generatableType
     *            可注解的代码生成构造，通常是一个Java类，应该应用此描述
     * @return 为包含描述而创建的JavaDoc注解
     */
    @Override
    public JDocComment apply(String nodeName, JsonNode node, JsonNode parent, JDocCommentable generatableType, Schema schema) {
        JDocComment javadoc = generatableType.javadoc();

        String descriptionText = node.asText();

        if(StringUtils.isNotBlank(descriptionText)) {

            String[] lines = node.asText().split("/\r?\n/");

            for(String line : lines) {
                javadoc.append(line);
            }
        }

        return javadoc;
    }

}
